package com.dhcc.bpm.modules.scf.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.dhcc.bpm.modules.scf.entity.ScfFileAttachmentInfo;
import com.dhcc.bpm.modules.scf.vo.ScfFileAttachmentInfoVO.ScfFileAttachmentInfoVO;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.support.Kv;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 *  文件附件表服务类
 *
 * @author liuguoting
 * @since 2023-09-05
 */
public interface IScfFileAttachmentInfoService extends IService<ScfFileAttachmentInfo> {
    /**
     * 文件上传接口
     * @param file
     * @return
     */
    ScfFileAttachmentInfo uploadFile(String operatorId, String fileType, MultipartFile file  ,String associationId, String fileCategory) throws Exception;

    /**
     * 批量给记录插入对应功能记录的主键
     * @param rowIds
     * @param newValue
     */
    void batchUpdateField(List<String> rowIds, String newValue);

    /**
     * 根据关联编号删除记录所对应的全部文件
     * @param newValue
     * @return
     */
    boolean batchDeleteFile(String newValue);

    /**
     * 更新文件附件时，删除旧文件记录。
     *
     * @param rowId
     * @return
     */
    boolean deleteByOldFileInfo(String rowId);


    /**
     * 根据关联编号查询所有文件附件信息
     * @param newValue
     * @return
     */
    List<ScfFileAttachmentInfoVO> selectAllByAssociationId(String newValue);



    /**
     * 根据记录id查询对应存储路径
     * @param rowId
     * @return
     */
    String getFilePath(String rowId,String FileCategory);

    /**
     * 上传并更新文件附件表字段
     *
     * @param operatorId
     * @param fileType
     * @param file
     * @return
     * @throws IOException
     */
    ScfFileAttachmentInfoVO uploadAttachment(String operatorId, String fileType, MultipartFile file ,String associationId, String fileCategory) throws Exception;

    /**
     * 根据id查询文件信息返回
     * @param rowIds
     * @return
     * @throws IOException
     */
    List<Kv> fileDetails(List<String> rowIds, String fileCategory) throws IOException;

    Boolean updataFiledNull(String rowId);

    /**
     * 根据文件id将文件临时路径更新为正式路径
     *
     * @param rowId
     * @return
     */
    Boolean updateFilePath(String rowId, String objectKey);

    /**
     * 根据associationId查询文件RowId
     *
     * @return
     */
    List<String> selectAssociationIdByRowId(String rowId);



    /**
     * 根据 rowId 删除文件
     * @param rowId
     * @return
     */
    R<Boolean> deleteFileByRowId(String rowId);

}
